﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SISLOG.BusinessEntities;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Microsoft.Practices.Unity;
using System.Data.Common;


namespace SISLOG.DataAccess
{
    public class UsuarioDAO:MasterDAEL,IUsuarioDAO
    {

       [Dependency]
        public IAreaDAO AreaDAO { get; set; }


        public List<Usuario> GetAllFromUsuario()
        {
            var usuarios = dbSisLog.ExecuteSprocAccessor<Usuario>("GetAllFromUsuario", RowMapperUsuario());
            return usuarios.ToList();
        }

        private IRowMapper<Usuario> RowMapperUsuario()
        {
            IRowMapper<Usuario> rowMapper = MapBuilder<Usuario>.MapAllProperties()
                .Map(u => u.Area).WithFunc(u => AreaDAO.GetAllFromAreaByIdArea(u.GetInt32(u.GetOrdinal("idArea"))))
                .Build();

            return rowMapper;
        }


        public void RegistrarUsuario(Usuario usuario)
        {            
            DbCommand comando = dbSisLog.GetStoredProcCommand("RegistarUsuario");
                           dbSisLog.AddInParameter(comando, "idUsuario", System.Data.DbType.Int32, usuario.idUsuario);
                           dbSisLog.AddInParameter(comando, "dni", System.Data.DbType.String, usuario.dni);
                           dbSisLog.AddInParameter(comando, "nombres", System.Data.DbType.String, usuario.nombres);
                           dbSisLog.AddInParameter(comando, "apellidoPaterno", System.Data.DbType.String, usuario.apellidoPaterno);
                           dbSisLog.AddInParameter(comando, "apellidoMaterno", System.Data.DbType.String, usuario.apellidoMaterno);
                           dbSisLog.AddInParameter(comando, "contrasenia", System.Data.DbType.String, usuario.contrasenia);
                           dbSisLog.AddInParameter(comando, "idArea", System.Data.DbType.Int32, usuario.idArea);
                           dbSisLog.ExecuteNonQuery(comando);         
        }

        public Usuario GetFromUsuarioByIdUsuario(int idUsuario)
        {
            var usuarios = dbSisLog.ExecuteSprocAccessor<Usuario>("GetFromUsuarioByIdUsuario", RowMapperUsuario(), idUsuario);
            return usuarios.SingleOrDefault();
        }

        public List<Usuario> GetFromUsuarioByCriterio(string criterio)
        {
            var usuarios = dbSisLog.ExecuteSprocAccessor<Usuario>("GetFromUsuarioByCriterio", RowMapperUsuario(), criterio);
            return usuarios.ToList();
        }


        public List<Usuario> GetFromUsuarioByDNI(string dni)
        {
            var usuarios = dbSisLog.ExecuteSprocAccessor<Usuario>("GetFromUsuarioByDNI", RowMapperUsuario(), dni);
            return usuarios.ToList();
        }
    }
}